import BaseEventMgr from "../../platform/event/BaseEventMgr";
import { UIComponent } from "../../platform/ui/UIComponent";
import { BattleEventType } from "../common/BattleEventType";
import { BattleRoom } from "./BattleRoom";
import { Enum_PropType } from "./Enum_PropType";
import { PropSet } from "./PropertySet";

export class BattleObj extends UIComponent{

    id:number = 0; //唯一id
    cfgId:number = 0; //配置id

    //配置属性
    configPropSet:PropSet = new PropSet()
    //运行时属性
    propSet:PropSet = new PropSet()
    //状态管理器
    //技能管理器
    //buff管理器

    //事件管理器
    eventMgr:BaseEventMgr = new BaseEventMgr();


    /**
     * 属性改变
     * @param propType 属性类型
     * @param value 改变的属性值
     * @param source 属性改变的来源 TODO 这里是传战斗对象还是技能呢？
     */
    propChange(propType: Enum_PropType, value: number,source: BattleObj) {
        if(propType === Enum_PropType.HP){
            this.hpChange(value,source);
        }
    }

    hpChange(value: number,source:BattleObj) {
        if(this.isDead()){
            return
        }
        if(value>0){//增加，检测是否有增强或阻止加血的状态等

            //增益
            //减益
            //护盾
        }else{//减少，检测是否有阻止或增强减血的状态等

        }
        if(value==0){
            return
        }

        let old = this.propSet.get(Enum_PropType.HP);
        let newHp = old+ value;
        if(newHp < 0){
            newHp = 0;
        }
        let change = newHp - old;
        //TODO 发布事件
        BattleRoom.currentRoom.emit(BattleEventType.HpChange, this, change);
        this.eventMgr.emit(BattleEventType.HpChange, this, change);
        if(newHp==0){
            //发布死亡前事件
        }
        this.propSet.set(Enum_PropType.HP, newHp);
        if(this.isDead()){
            //发布真正死亡事件
            this.dead();
        }
    }
    public isDead(): boolean {
        return this.propSet.get(Enum_PropType.HP) <= 0;
    }
    dead(){
        this.node.active = false;
        this.node.destroy();
    }

}